Distributed computing, a field in modern computing, involves processing large data sets in a distributed fashion over many different physical hosts in a data center or in some cases, over many hosts spread over multiple locations and connected over a network. With technical advances in virtual computing, many of the distributed tasks are performed by virtual resources created on these physical hosts. Scheduling virtual resources to perform these distributed tasks in virtual cloud infrastructures such as OpenStack is an important problem. Typically, scheduling involves creating virtual resources from a constrained, limited set of physical compute, storage, and network resources. For instance, compute scheduling involves determining where to create or instantiate a virtual resource (or referred herein as “virtual resource placements”) on a physical hypervisor or host available from a pool of hosts available in the datacenter.